{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# read in data，数据在xgboost安装的路径下的demo目录,现在我们将其copy到当前代码下的data目录\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath + \"RentListingInquries_FE_train.csv\")\n",
    "y_train = train[\"interest_level\"]\n",
    "X_train = train.drop(\"interest_level\", axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 1, 1.5, 2], 'reg_lambda': [1.5, 2, 2.5]}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [0.1, 1, 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [1.5, 2, 2.5]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58222, std: 0.00352, params: {'reg_alpha': 0.1, 'reg_lambda': 1.5},\n",
       "  mean: -0.58193, std: 0.00326, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.58204, std: 0.00314, params: {'reg_alpha': 0.1, 'reg_lambda': 2.5},\n",
       "  mean: -0.58177, std: 0.00322, params: {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  mean: -0.58158, std: 0.00353, params: {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  mean: -0.58195, std: 0.00324, params: {'reg_alpha': 1, 'reg_lambda': 2.5},\n",
       "  mean: -0.58209, std: 0.00309, params: {'reg_alpha': 1.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.58157, std: 0.00275, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58189, std: 0.00289, params: {'reg_alpha': 1.5, 'reg_lambda': 2.5},\n",
       "  mean: -0.58173, std: 0.00316, params: {'reg_alpha': 2, 'reg_lambda': 1.5},\n",
       "  mean: -0.58172, std: 0.00282, params: {'reg_alpha': 2, 'reg_lambda': 2},\n",
       "  mean: -0.58198, std: 0.00326, params: {'reg_alpha': 2, 'reg_lambda': 2.5}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       " -0.5815727783519496)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=204,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.6,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581573 using {'reg_alpha': 1.5, 'reg_lambda': 2}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f38ae546be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
